স্প্রিং সিকিউরিটি (ইংরেজি: Spring Security)হলো একটি পাওয়ারফুল নিরাপত্তা ফ্রেমওয়ার্ক যা Spring অ্যাপ্লিকেশনের জন্য ডিজাইন করা হয়েছে। এটি একটি সমৃদ্ধ নিরাপত্তা সমাধান সরবরাহ করে যা অ্যান্থেন্টিকেশন (প্রমাণীকরণ), অথোরাইজেশন (অনুমোদন), এবং অ্যাপ্লিকেশন সুরক্ষা সরবরাহ করে। Spring Security বিভিন্ন ধরনের নিরাপত্তার প্রয়োজনীয়তা পূরণ করার জন্য একটি নমনীয় এবং কনফিগারেবল সমাধান প্রদান করে।
Spring Security হলো Spring Framework এর একটি শক্তিশালী সিকিউরিটি ফ্রেমওয়ার্ক, যা অথেন্টিকেশন এবং অথরাইজেশন প্রক্রিয়া সহজ ও কার্যকর করে তোলে। Spring Security বিশেষ করে ওয়েব অ্যাপ্লিকেশন এবং এন্টারপ্রাইজ অ্যাপ্লিকেশন এর নিরাপত্তা নিশ্চিত করার জন্য ব্যবহৃত হয়। এটি বিভিন্ন প্রোটোকল, যেমন HTTP Basic Authentication, OAuth2, JWT, এবং LDAP সমর্থন করে। Spring Security-র মাধ্যমে ডেভেলপাররা সহজে ইউজার অথেন্টিকেশন, অ্যাক্সেস কন্ট্রোল, এবং সেশন ম্যানেজমেন্ট করতে পারে।
ধাপ ১: Spring Security ডিপেনডেন্সি যোগ করা
Spring Security ব্যবহার শুরু করার জন্য প্রথমে Maven বা Gradle দিয়ে Spring Security-র ডিপেনডেন্সি যোগ করতে হবে।
Maven ব্যবহার করে ইনস্টলেশন:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Gradle ব্যবহার করে ইনস্টলেশন:
implementation 'org.springframework.boot:spring-boot-starter-security'
ধাপ ২: Spring Security ডিফল্ট কনফিগারেশন
Spring Security ইনস্টল করার পর ডিফল্টভাবে এটি আপনার অ্যাপ্লিকেশনে সিকিউরিটি যোগ করবে। Spring Boot অ্যাপ্লিকেশন রান করার পরে আপনি অ্যাপ্লিকেশনের সব পেজে অ্যাক্সেস পেতে গেলে একটি লগইন পেইজ দেখতে পাবেন।
Spring Security ডিফল্ট লগইন পেইজ সরবরাহ করে এবং username = user এবং একটি অটো-জেনারেটেড পাসওয়ার্ড ব্যবহার করতে হবে, যা কনসোলে দেখতে পাবেন।
ধাপ ৩: কাস্টম অথেন্টিকেশন কনফিগারেশন
Spring Security-র মাধ্যমে আপনি খুব সহজেই কাস্টম অথেন্টিকেশন কনফিগার করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো যেখানে আমরা username এবং password নির্ধারণ করছি:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((requests) -> requests
.antMatchers("/", "/home").permitAll() // অনুমতি ছাড়া অ্যাক্সেসযোগ্য পেজ
.anyRequest().authenticated() // বাকি সব পেজের জন্য অথেন্টিকেশন প্রয়োজন
)
.formLogin((form) -> form
.loginPage("/login") // কাস্টম লগইন পেইজ
.permitAll()
)
.logout((logout) -> logout.permitAll());
return http.build();
}
@Bean
public UserDetailsService userDetailsService() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
}
উপরের উদাহরণে:
ধাপ ৪: রোল-বেইজড অথরাইজেশন
Spring Security তে আপনি বিভিন্ন রোল ভিত্তিক অ্যাক্সেস কন্ট্রোল করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো যেখানে দুটি রোল, USER এবং ADMIN তৈরি করা হয়েছে:
@Bean
public UserDetailsService userDetailsService() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
UserDetails admin = User.withDefaultPasswordEncoder()
.username("admin")
.password("adminpassword")
.roles("ADMIN")
.build();
return new InMemoryUserDetailsManager(user, admin);
}
এবার আপনি admin ইউজারের জন্য আলাদা অথরাইজেশন সেট করতে পারেন:
http.authorizeHttpRequests((requests) -> requests
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
);
ধাপ ৫: HTTP Basic Authentication
Spring Security এর মাধ্যমে আপনি HTTP Basic Authentication খুব সহজেই যোগ করতে পারেন। এর জন্য আপনাকে কোনো বিশেষ কনফিগারেশন করতে হবে না। শুধু নিচের মতোভাবে কনফিগারেশন যোগ করুন:
http
.authorizeHttpRequests((requests) -> requests
.anyRequest().authenticated()
)
.httpBasic(); // HTTP Basic Authentication যোগ করা
ধাপ ৬: CSRF প্রোটেকশন
Spring Security তে CSRF (Cross-Site Request Forgery) প্রোটেকশন ডিফল্টভাবে সক্রিয় থাকে। আপনি চাইলে এটি নিষ্ক্রিয় করতে পারেন:
http
.csrf().disable()
.authorizeHttpRequests((requests) -> requests
.anyRequest().authenticated()
);
ধাপ ৭: Method-Level Security
Spring Security আপনাকে মেথড-লেভেলে নিরাপত্তা নির্ধারণ করতে দেয়। উদাহরণস্বরূপ, একটি মেথডকে শুধুমাত্র ADMIN রোলের ব্যবহারকারী ব্যবহার করতে পারবে:
import org.springframework.security.access.annotation.Secured;
@Secured("ROLE_ADMIN")
public void adminOnlyMethod() {
// শুধুমাত্র ADMIN রোলের জন্য অ্যাক্সেসযোগ্য
}
ধাপ ৮: OAuth2 এবং JWT Authentication
Spring Security-তে OAuth2 এবং JWT (JSON Web Token) ভিত্তিক অথেন্টিকেশন সেটআপ করা যায়। Spring Security OAuth2 এর মাধ্যমে আপনি বিভিন্ন সোশ্যাল লগইন (যেমন Google, Facebook) অথবা JWT token-based Authentication করতে পারেন।
| বিষয় | Spring Security | Apache Shiro | Keycloak |
|---|---|---|---|
| আর্কিটেকচার | মডুলার | সহজ এবং লাইটওয়েট | ফেডারেটেড |
| OAuth2 এবং JWT | সমর্থিত | সীমিত | সমর্থিত |
| Method-level Security | সমর্থিত | সমর্থিত | সমর্থিত নয় |
| রোল বেসড অ্যাক্সেস | সমর্থিত | সমর্থিত | সমর্থিত |
Spring Security হলো একটি শক্তিশালী এবং ব্যাপকভাবে ব্যবহৃত সিকিউরিটি ফ্রেমওয়ার্ক, যা জাভা ভিত্তিক ওয়েব এবং এন্টারপ্রাইজ অ্যাপ্লিকেশনের জন্য আদর্শ। এর অথেন্টিকেশন, অথরাইজেশন, রোল বেসড অ্যাক্সেস কন্ট্রোল, এবং OAuth2 ও JWT সমর্থন এটিকে একটি অত্যন্ত কার্যকরী টুল হিসেবে গড়ে তুলেছে। Spring Security শেখা কিছুটা সময়সাপেক্ষ হতে পারে, তবে এটি একটি অত্যন্ত গুরুত্বপূর্ণ স্কিল, বিশেষ করে জাভা ডেভেলপারদের জন্য।
স্প্রিং সিকিউরিটি (ইংরেজি: Spring Security)হলো একটি পাওয়ারফুল নিরাপত্তা ফ্রেমওয়ার্ক যা Spring অ্যাপ্লিকেশনের জন্য ডিজাইন করা হয়েছে। এটি একটি সমৃদ্ধ নিরাপত্তা সমাধান সরবরাহ করে যা অ্যান্থেন্টিকেশন (প্রমাণীকরণ), অথোরাইজেশন (অনুমোদন), এবং অ্যাপ্লিকেশন সুরক্ষা সরবরাহ করে। Spring Security বিভিন্ন ধরনের নিরাপত্তার প্রয়োজনীয়তা পূরণ করার জন্য একটি নমনীয় এবং কনফিগারেবল সমাধান প্রদান করে।
Spring Security হলো Spring Framework এর একটি শক্তিশালী সিকিউরিটি ফ্রেমওয়ার্ক, যা অথেন্টিকেশন এবং অথরাইজেশন প্রক্রিয়া সহজ ও কার্যকর করে তোলে। Spring Security বিশেষ করে ওয়েব অ্যাপ্লিকেশন এবং এন্টারপ্রাইজ অ্যাপ্লিকেশন এর নিরাপত্তা নিশ্চিত করার জন্য ব্যবহৃত হয়। এটি বিভিন্ন প্রোটোকল, যেমন HTTP Basic Authentication, OAuth2, JWT, এবং LDAP সমর্থন করে। Spring Security-র মাধ্যমে ডেভেলপাররা সহজে ইউজার অথেন্টিকেশন, অ্যাক্সেস কন্ট্রোল, এবং সেশন ম্যানেজমেন্ট করতে পারে।
ধাপ ১: Spring Security ডিপেনডেন্সি যোগ করা
Spring Security ব্যবহার শুরু করার জন্য প্রথমে Maven বা Gradle দিয়ে Spring Security-র ডিপেনডেন্সি যোগ করতে হবে।
Maven ব্যবহার করে ইনস্টলেশন:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Gradle ব্যবহার করে ইনস্টলেশন:
implementation 'org.springframework.boot:spring-boot-starter-security'
ধাপ ২: Spring Security ডিফল্ট কনফিগারেশন
Spring Security ইনস্টল করার পর ডিফল্টভাবে এটি আপনার অ্যাপ্লিকেশনে সিকিউরিটি যোগ করবে। Spring Boot অ্যাপ্লিকেশন রান করার পরে আপনি অ্যাপ্লিকেশনের সব পেজে অ্যাক্সেস পেতে গেলে একটি লগইন পেইজ দেখতে পাবেন।
Spring Security ডিফল্ট লগইন পেইজ সরবরাহ করে এবং username = user এবং একটি অটো-জেনারেটেড পাসওয়ার্ড ব্যবহার করতে হবে, যা কনসোলে দেখতে পাবেন।
ধাপ ৩: কাস্টম অথেন্টিকেশন কনফিগারেশন
Spring Security-র মাধ্যমে আপনি খুব সহজেই কাস্টম অথেন্টিকেশন কনফিগার করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো যেখানে আমরা username এবং password নির্ধারণ করছি:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((requests) -> requests
.antMatchers("/", "/home").permitAll() // অনুমতি ছাড়া অ্যাক্সেসযোগ্য পেজ
.anyRequest().authenticated() // বাকি সব পেজের জন্য অথেন্টিকেশন প্রয়োজন
)
.formLogin((form) -> form
.loginPage("/login") // কাস্টম লগইন পেইজ
.permitAll()
)
.logout((logout) -> logout.permitAll());
return http.build();
}
@Bean
public UserDetailsService userDetailsService() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
}
উপরের উদাহরণে:
ধাপ ৪: রোল-বেইজড অথরাইজেশন
Spring Security তে আপনি বিভিন্ন রোল ভিত্তিক অ্যাক্সেস কন্ট্রোল করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো যেখানে দুটি রোল, USER এবং ADMIN তৈরি করা হয়েছে:
@Bean
public UserDetailsService userDetailsService() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
UserDetails admin = User.withDefaultPasswordEncoder()
.username("admin")
.password("adminpassword")
.roles("ADMIN")
.build();
return new InMemoryUserDetailsManager(user, admin);
}
এবার আপনি admin ইউজারের জন্য আলাদা অথরাইজেশন সেট করতে পারেন:
http.authorizeHttpRequests((requests) -> requests
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
);
ধাপ ৫: HTTP Basic Authentication
Spring Security এর মাধ্যমে আপনি HTTP Basic Authentication খুব সহজেই যোগ করতে পারেন। এর জন্য আপনাকে কোনো বিশেষ কনফিগারেশন করতে হবে না। শুধু নিচের মতোভাবে কনফিগারেশন যোগ করুন:
http
.authorizeHttpRequests((requests) -> requests
.anyRequest().authenticated()
)
.httpBasic(); // HTTP Basic Authentication যোগ করা
ধাপ ৬: CSRF প্রোটেকশন
Spring Security তে CSRF (Cross-Site Request Forgery) প্রোটেকশন ডিফল্টভাবে সক্রিয় থাকে। আপনি চাইলে এটি নিষ্ক্রিয় করতে পারেন:
http
.csrf().disable()
.authorizeHttpRequests((requests) -> requests
.anyRequest().authenticated()
);
ধাপ ৭: Method-Level Security
Spring Security আপনাকে মেথড-লেভেলে নিরাপত্তা নির্ধারণ করতে দেয়। উদাহরণস্বরূপ, একটি মেথডকে শুধুমাত্র ADMIN রোলের ব্যবহারকারী ব্যবহার করতে পারবে:
import org.springframework.security.access.annotation.Secured;
@Secured("ROLE_ADMIN")
public void adminOnlyMethod() {
// শুধুমাত্র ADMIN রোলের জন্য অ্যাক্সেসযোগ্য
}
ধাপ ৮: OAuth2 এবং JWT Authentication
Spring Security-তে OAuth2 এবং JWT (JSON Web Token) ভিত্তিক অথেন্টিকেশন সেটআপ করা যায়। Spring Security OAuth2 এর মাধ্যমে আপনি বিভিন্ন সোশ্যাল লগইন (যেমন Google, Facebook) অথবা JWT token-based Authentication করতে পারেন।
| বিষয় | Spring Security | Apache Shiro | Keycloak |
|---|---|---|---|
| আর্কিটেকচার | মডুলার | সহজ এবং লাইটওয়েট | ফেডারেটেড |
| OAuth2 এবং JWT | সমর্থিত | সীমিত | সমর্থিত |
| Method-level Security | সমর্থিত | সমর্থিত | সমর্থিত নয় |
| রোল বেসড অ্যাক্সেস | সমর্থিত | সমর্থিত | সমর্থিত |
Spring Security হলো একটি শক্তিশালী এবং ব্যাপকভাবে ব্যবহৃত সিকিউরিটি ফ্রেমওয়ার্ক, যা জাভা ভিত্তিক ওয়েব এবং এন্টারপ্রাইজ অ্যাপ্লিকেশনের জন্য আদর্শ। এর অথেন্টিকেশন, অথরাইজেশন, রোল বেসড অ্যাক্সেস কন্ট্রোল, এবং OAuth2 ও JWT সমর্থন এটিকে একটি অত্যন্ত কার্যকরী টুল হিসেবে গড়ে তুলেছে। Spring Security শেখা কিছুটা সময়সাপেক্ষ হতে পারে, তবে এটি একটি অত্যন্ত গুরুত্বপূর্ণ স্কিল, বিশেষ করে জাভা ডেভেলপারদের জন্য।
আপনি আমাকে যেকোনো প্রশ্ন করতে পারেন, যেমনঃ
Are you sure to start over?